// var n;
// var $fitScale = require("./AL_Framework_Fit_Scale");
// var $uIView = require("./AL_Framework_UI_View");
// var u = cc._decorator;
// var h = u.ccclass;
// var p = u.property;
// var g = (function (e) {
//     function t() {
//         var t = (null !== e && e.apply(this, arguments)) || this;
//         t.bg = null;
//         t.window = null;
//         t.auto_Resize = !0;
//         t.touch_Bg_Close = !1;
//         t._blockTop = null;
//         t._animationDuration = 0.3;
//         t.params = {};
//         t.isHide = !1;
//         t.bgOpacity = 255;
//         t.finishCallback = null;
//         t.xiaohui_huidiao = null;
//         return t;
//     }
//     __extends(t, e);
//     t.prototype.onLoad = function () {
//         e.prototype.onLoad.call(this);
//         if (this.bg) {
//             this.bgOpacity = this.bg.opacity;
//         }
//         if (!this.node.getComponent(cc.BlockInputEvents)) {
//             this.node.addComponent(cc.BlockInputEvents);
//         }
//         if (this.auto_Resize) {
//             this.node.addComponent($fitScale.default).shezhiShifouShiyingKuanGao(!0, !1);
//         }
//         if (this.getComponent(cc.Widget)) {
//             this.getComponent(cc.Widget).updateAlignment();
//         }
//         if (this.window && this.window.getComponent(cc.Widget)) {
//             this.window.getComponent(cc.Widget).updateAlignment();
//             this.window.getComponent(cc.Widget).enabled = !1;
//         }
//         if (this.touch_Bg_Close) {
//             this._tianjia_dianji_guanbi_shijian();
//         }
//     };
//     t.prototype.show = function (e) {
//         return __awaiter(this, void 0, void 0, function () {
//             return __generator(this, function (t) {
//                 switch (t.label) {
//                     case 0:
//                         this.args = e;
//                         this.isHide = !1;
//                         this.node.active = !0;
//                         this.init(e);
//                         this.gengxin_xianshi(e);
//                         return this.params && this.params.chuli_xianshi_qian ? [4, this.params.chuli_xianshi_qian()] : [3, 2];
//                     case 1:
//                         t.sent();
//                         t.label = 2;
//                     case 2:
//                         return this.chuli_xianshi_qian ? [4, this.chuli_xianshi_qian()] : [3, 4];
//                     case 3:
//                         t.sent();
//                         t.label = 4;
//                     case 4:
//                         this.xianshi_block_top();
//                         return [4, this.xianshi_dongzuo()];
//                     case 5:
//                         t.sent();
//                         this.yincang_block_top();
//                         if (this.params && this.params.chuli_xianshi_hou) {
//                             this.params.chuli_xianshi_hou();
//                         }
//                         if (this.chuli_xianshi_hou) {
//                             this.chuli_xianshi_hou();
//                         }
//                         this.yincang_block_top();
//                         return [2];
//                 }
//             });
//         });
//     };
//     t.prototype.hide = function (e, t) {
//         if (void 0 === e) {
//             e = !1;
//         }
//         return __awaiter(this, void 0, void 0, function () {
//             var o;
//             return __generator(this, function (i) {
//                 switch (i.label) {
//                     case 0:
//                         return cc.isValid(this.node)
//                             ? this.isHide
//                                 ? [3, 7]
//                                 : ((o = this.node),
//                                   (this.isHide = !0),
//                                   e
//                                       ? [3, 5]
//                                       : this.params && this.params.onBeforHide
//                                       ? [4, this.params.onBeforHide()]
//                                       : [3, 2])
//                             : [2];
//                     case 1:
//                         i.sent();
//                         i.label = 2;
//                     case 2:
//                         return this.chuli_yincang_qian ? [4, this.chuli_yincang_qian()] : [3, 4];
//                     case 3:
//                         i.sent();
//                         i.label = 4;
//                     case 4:
//                         i.label = 5;
//                     case 5:
//                         this.xianshi_block_top();
//                         return [4, this.yincang_dongzuo()];
//                     case 6:
//                         i.sent();
//                         this.yincang_block_top();
//                         o.active = !1;
//                         if (!e) {
//                             if (this.params && this.params.chuli_yincang_hou) {
//                                 this.params.chuli_yincang_hou();
//                             }
//                             if (this.chuli_yincang_hou) {
//                                 this.chuli_yincang_hou();
//                             }
//                             if (t) {
//                                 t();
//                             }
//                         }
//                         if (this.finishCallback) {
//                             this.finishCallback(e);
//                         }
//                         i.label = 7;
//                     case 7:
//                         return [2];
//                 }
//             });
//         });
//     };
//     t.prototype.close = function () {
//         this.hide(!1);
//     };
//     t.prototype.hide_View_Atonce = function () {
//         var e = this.node;
//         this.isHide = !0;
//         e.active = !1;
//     };
//     t.prototype.init = function () {};
//     t.prototype.gengxin_xianshi = function () {};
//     t.prototype.xianshi_dongzuo = function () {
//         var e = this;
//         return new Promise(function (t) {
//             var o = e.bg;
//             var i = e.window;
//             if (o) {
//                 e.node.active = !0;
//                 o.active = !0;
//                 o.opacity = 0;
//                 cc.tween(o)
//                     .to(0.5 * e._animationDuration, {
//                         opacity: e.bgOpacity
//                     })
//                     .start();
//             }
//             i
//                 ? ((i.active = !0),
//                   (i.scale = 0.5),
//                   (i.opacity = 0),
//                   cc
//                       .tween(i)
//                       .to(
//                           e._animationDuration,
//                           {
//                               scale: 1,
//                               opacity: 255
//                           },
//                           {
//                               easing: "backOut"
//                           }
//                       )
//                       .call(function () {
//                           t();
//                       })
//                       .start())
//                 : t();
//         });
//     };
//     t.prototype.yincang_dongzuo = function () {
//         var e = this;
//         return new Promise(function (t) {
//             if (e.bg) {
//                 cc.tween(e.bg)
//                     .delay(0.5 * e._animationDuration)
//                     .to(0.5 * e._animationDuration, {
//                         opacity: 0
//                     })
//                     .start();
//             }
//             e.window
//                 ? cc
//                       .tween(e.window)
//                       .to(
//                           e._animationDuration,
//                           {
//                               scale: 0.5,
//                               opacity: 0
//                           },
//                           {
//                               easing: "backIn"
//                           }
//                       )
//                       .call(t)
//                       .start()
//                 : t();
//         });
//     };
//     t.prototype.chuli_xianshi_qian = function () {
//         return Promise.resolve();
//     };
//     t.prototype.chuli_xianshi_hou = function () {};
//     t.prototype.chuli_yincang_qian = function () {
//         return new Promise(function (e) {
//             return e();
//         });
//     };
//     t.prototype.chuli_yincang_hou = function () {};
//     t.prototype.chuli_suspended = function () {
//         return new Promise(function (e) {
//             return e();
//         });
//     };
//     t.prototype.xianshi_block_top = function () {
//         if (cc.isValid(this.node)) {
//             if (!this._blockTop) {
//                 var e = new cc.Node("blockTop");
//                 e.width = cc.winSize.width;
//                 e.height = cc.winSize.height;
//                 this.node.addChild(e);
//                 this._blockTop = e.addComponent(cc.BlockInputEvents);
//             }
//             this._blockTop.node.active = !0;
//         }
//     };
//     t.prototype.yincang_block_top = function () {
//         if (this._blockTop) {
//             this._blockTop.node.active = !1;
//         }
//     };
//     t.prototype._tianjia_dianji_guanbi_shijian = function () {
//         var e = this;
//         if (this.bg) {
//             this.bg.on(
//                 "touchend",
//                 function () {
//                     e.hide();
//                 },
//                 this
//             );
//         }
//         if (this.window) {
//             this.window.on("touchend", function () {});
//         }
//     };
//     t.prototype.onDestroy = function () {
//         e.prototype.onDestroy.call(this);
//         if (this.xiaohui_huidiao) {
//             this.xiaohui_huidiao();
//         }
//     };
//     __decorate(
//         [
//             p({
//                 type: cc.Node,
//                 tooltip: "弹窗背景"
//             })
//         ],
//         t.prototype,
//         "bg",
//         void 0
//     );
//     __decorate(
//         [
//             p({
//                 type: cc.Node,
//                 tooltip: "弹窗窗体"
//             })
//         ],
//         t.prototype,
//         "window",
//         void 0
//     );
//     __decorate(
//         [
//             p({
//                 tooltip: "自适应缩放"
//             })
//         ],
//         t.prototype,
//         "auto_Resize",
//         void 0
//     );
//     __decorate(
//         [
//             p({
//                 tooltip: "点击背景关闭弹窗"
//             })
//         ],
//         t.prototype,
//         "touch_Bg_Close",
//         void 0
//     );
//     return __decorate([h], t);
// })($uIView.default);
// exports.default = g;



const AL_Framework_Fit_Scale = require("./AL_Framework_Fit_Scale");
const AL_Framework_UI_View = require("./AL_Framework_UI_View");
const { ccclass, property } = cc._decorator;

/**
 * 弹窗管理类
 */
@ccclass
class AL_Framework_Popup_Manager extends AL_Framework_UI_View.default {
    
    @property({ type: cc.Node, tooltip: "弹窗背景" })
    bg = null;

    @property({ type: cc.Node, tooltip: "弹窗窗体" })
    window = null;

    @property({ tooltip: "自适应缩放" })
    auto_Resize = true;

    @property({ tooltip: "点击背景关闭弹窗" })
    touch_Bg_Close = false;

    _blockTop = null;
    _animationDuration = 0.3;
    params = {};
    isHide = false;
    bgOpacity = 255;
    finishCallback = null;
    xiaohui_huidiao = null;

    onLoad() {
        super.onLoad();
        if (this.bg) {
            this.bgOpacity = this.bg.opacity;
        }
        if (!this.node.getComponent(cc.BlockInputEvents)) {
            this.node.addComponent(cc.BlockInputEvents);
        }
        if (this.auto_Resize) {
            this.node.addComponent(AL_Framework_Fit_Scale.default).shezhiShifouShiyingKuanGao(true, false);
        }
        if (this.getComponent(cc.Widget)) {
            this.getComponent(cc.Widget).updateAlignment();
        }
        if (this.window && this.window.getComponent(cc.Widget)) {
            const widget = this.window.getComponent(cc.Widget);
            widget.updateAlignment();
            widget.enabled = false;
        }
        if (this.touch_Bg_Close) {
            this._tianjia_dianji_guanbi_shijian();
        }
    }

    async show(params) {
        this.args = params;
        this.isHide = false;
        this.node.active = true;
        this.init(params);
        this.gengxin_xianshi(params);

        if (this.params?.chuli_xianshi_qian) {
            await this.params.chuli_xianshi_qian();
        }
        if (this.chuli_xianshi_qian) {
            await this.chuli_xianshi_qian();
        }
        
        this.xianshi_block_top();
        await this.xianshi_dongzuo();
        this.yincang_block_top();

        if (this.params?.chuli_xianshi_hou) {
            this.params.chuli_xianshi_hou();
        }
        if (this.chuli_xianshi_hou) {
            this.chuli_xianshi_hou();
        }
    }

    async hide(forceHide = false, callback) {
        if (!cc.isValid(this.node) || this.isHide) return;
        
        this.isHide = true;
        const node = this.node;
        
        if (!forceHide) {
            if (this.params?.onBeforHide) {
                await this.params.onBeforHide();
            }
            if (this.chuli_yincang_qian) {
                await this.chuli_yincang_qian();
            }
        }
        
        this.xianshi_block_top();
        await this.yincang_dongzuo();
        this.yincang_block_top();
        node.active = false;

        if (!forceHide) {
            if (this.params?.chuli_yincang_hou) {
                this.params.chuli_yincang_hou();
            }
            if (this.chuli_yincang_hou) {
                this.chuli_yincang_hou();
            }
            if (callback) {
                callback();
            }
        }
        if (this.finishCallback) {
            this.finishCallback(forceHide);
        }
    }

    close() {
        this.hide(false);
    }

    hide_View_Atonce() {
        this.isHide = true;
        this.node.active = false;
    }

    init() {}

    gengxin_xianshi() {}

    xianshi_dongzuo() {
        return new Promise((resolve) => {
            if (this.bg) {
                this.node.active = true;
                this.bg.active = true;
                this.bg.opacity = 0;
                cc.tween(this.bg)
                    .to(0.5 * this._animationDuration, { opacity: this.bgOpacity })
                    .start();
            }
            if (this.window) {
                this.window.active = true;
                this.window.scale = 0.5;
                this.window.opacity = 0;
                cc.tween(this.window)
                    .to(this._animationDuration, { scale: 1, opacity: 255 }, { easing: "backOut" })
                    .call(resolve)
                    .start();
            } else {
                resolve();
            }
        });
    }

    yincang_dongzuo() {
        return new Promise((resolve) => {
            if (this.bg) {
                cc.tween(this.bg)
                    .delay(0.5 * this._animationDuration)
                    .to(0.5 * this._animationDuration, { opacity: 0 })
                    .start();
            }
            if (this.window) {
                cc.tween(this.window)
                    .to(this._animationDuration, { scale: 0.5, opacity: 0 }, { easing: "backIn" })
                    .call(resolve)
                    .start();
            } else {
                resolve();
            }
        });
    }

    chuli_xianshi_qian() {
        return Promise.resolve();
    }

    chuli_xianshi_hou() {}

    chuli_yincang_qian() {
        return Promise.resolve();
    }

    chuli_yincang_hou() {}

    chuli_suspended() {
        return Promise.resolve();
    }

    xianshi_block_top() {
        if (cc.isValid(this.node)) {
            if (!this._blockTop) {
                const blockNode = new cc.Node("blockTop");
                blockNode.width = cc.winSize.width;
                blockNode.height = cc.winSize.height;
                this.node.addChild(blockNode);
                this._blockTop = blockNode.addComponent(cc.BlockInputEvents);
            }
            this._blockTop.node.active = true;
        }
    }

    yincang_block_top() {
        if (this._blockTop) {
            this._blockTop.node.active = false;
        }
    }

    _tianjia_dianji_guanbi_shijian() {
        if (this.bg) {
            this.bg.on("touchend", () => {
                this.hide();
            }, this);
        }
    }

    onDestroy() {
        super.onDestroy();
        if (this.xiaohui_huidiao) {
            this.xiaohui_huidiao();
        }
    }
}

exports.default = AL_Framework_Popup_Manager;
